const 값에 대한 참조
const int value=5;
const int& ref=value;
Initializing references to const valuesconst 참조는 non-const 값, const 값, Rvalue로 초기화할 수 있다.
int x=5;
const int& ref1=x;
const int y=7;
const int& ref2=y;
const int& ref3=6;
상수를 포인팅하는 포인터처럼 const 참조는 const가 아닌 값을 참조할 수 있다.
단, 이 때 참조 접근을 하면 const가 아니더라도 const로 간주된다.
int value=5;
const int& ref=value;
value=6;
ref=7;
References to Rvalues extend the lifetime of the referenced valueRvalue는 표현식 범위를 가진다.(값이 생성된 표현식 끝에서 소멸함)
단 const에 대한 참조가 Rvalue로 초기화하면, Rvalue의 수명이 참조형 변수의 수명에 맞게 확장된다.
int somefcn(void){
const int& ref=2+3;
std::cout<<ref<<std::endl;
}
Const references as function parameters함수 매개변수로 사용되는 참조가 const인 경우,
해당 인수에 대해서 복사본을 만들지 않고, 인수에 접근할 수 있으며
함수는 참조되는 값을 변경하지 못한다.
void changeN(const int& ref){
ref=6;
}
const 참조 매개변수를 사용해서 const Lvalue, non-const Lvalue, Rvalue등을 전달할 수 있다.
#include <iostream>
void printIt(const int& x){
std::cout<<x;
}
int main(void){
int a=1;
printIt(a);
const int b=2;
printIt(b);
printIt(3);
printIt(2+b);
return 0;
}
포인터나 기본 자료형이 아닌 타입의 복사본을 생성하지 않기 위해서 참조로 전달하는 것이 좋다.
기본자료형은 함수가 값을 변경해야 하는 경우가 아니라면 값으로 전달하는 것이 좋음